/**
 * 
 */
package rer.controller;

import java.io.Serializable;
import java.util.List;

import javax.enterprise.context.RequestScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;

import rer.model.Aluno;
import rer.model.Funcionario;
import rer.model.Turma;
import rer.persistencia.FuncionarioDAO;
import rer.persistencia.TurmasDAO;

/**
 * @author rickserrat
 *
 */
@Named("turmaBean")
@RequestScoped
public class TurmaBean implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -824944745613658652L;

	private TurmasDAO turmasDAO;
	private Turma turma;
	private Funcionario funcionario;
	private FuncionarioDAO funcionarioDAO;
	private Aluno aluno;
	private List<Aluno> alunos;
	
	
	public TurmaBean(){
		funcionario = new Funcionario();
		funcionarioDAO = new FuncionarioDAO();
		turmasDAO = new TurmasDAO();
		turma = new Turma();

	}

	/**
	 * @return the turma
	 */
	public Turma getTurma() {
		return turma;
	}

	/**
	 * @param turma the turma to set
	 */
	public void setTurma(Turma turma) {
		this.turma = turma;
	}

	
	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public List<Aluno> getAlunos() {
		return alunos;
	}

	public void setAlunos(List<Aluno> alunos) {
		this.alunos = alunos;
	}

	/**
	 * @param turma
	 * @return
	 * @see rer.persistencia.TurmasDAO#cadastrar(rer.model.Turma)
	 */
	public String cadastrar() {
		
		FacesContext context = FacesContext.getCurrentInstance();
		
		if (turmasDAO.cadastrar(turma) == true){
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Turma cadastrada com sucesso",""));
		}else{
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Turma nao cadastrada",""));
		}
		
		return "listar-turmas";
	}

	/**
	 * @param turma
	 * @return
	 * @see rer.persistencia.TurmasDAO#editar(rer.model.Turma)
	 */
	public String editar(int id) {
		
		turma = turmasDAO.pesquisarTurma(id);
		
		return "editar-turma";
	}

	/**
	 * @param id
	 * @return
	 * @see rer.persistencia.TurmasDAO#deletar(int)
	 */
	public String deletar(int id) {
		FacesContext context = FacesContext.getCurrentInstance();
		
		if(turmasDAO.validarExcluir(id) == true){
			if(turmasDAO.deletar(id) == true){
				context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Turma deletada com sucesso",""));
			}else{
				context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Turma nao foi deletada.",""));	
			}		
		}else{
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "A turma nao pode ser excluida, existem alunos ativos nessa turma.",""));
		}
				
		return "listar-turmas";
	}

	/**
	 * @return
	 * @see rer.persistencia.TurmasDAO#listar()
	 */
	public List<Turma> listar() {
						
		return turmasDAO.listar();
	}

		
	/**
	 * @param id
	 * @return
	 * @see rer.persistencia.TurmasDAO#pesquisarTurma(int)
	 */
	public Turma pesquisarTurma(int id) {
		return turmasDAO.pesquisarTurma(id);
	}

	public String salvarEdicao(){
		
		FacesContext context = FacesContext.getCurrentInstance();
		
		if(turmasDAO.editar(turma)){

			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Turmas atualizada com sucesso", ""));
			
		}else {
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Turmas nao foi atualizada", ""));
		}
		
		return "listar-turmas";
		
	}
	
	
	
	public List<Funcionario> listarFuncionarios(){
		funcionario = new Funcionario();
		funcionarioDAO = new FuncionarioDAO();
		return funcionarioDAO.listarFuncAtivos();
	}
	
	// Retorna a lista de alunos de uma turma
	public List<Aluno> alunosTurma (int id){
		return turmasDAO.alunos(id);
	}
	
	public Funcionario funcionarioTurma(int idTurma){
		return turmasDAO.funcionario(idTurma);
	}
	
	public String detalhesTurma(int id){
		turma = turmasDAO.pesquisarTurma(id);

		alunos = alunosTurma(id);
		funcionario = funcionarioTurma(id);
		
		return "detalhes-turma";
	}
	
	
}
